|
1
|
|
|
import path from 'path' |
|
2
|
|
|
|
|
3
|
|
|
import { |
|
4
|
|
|
config, |
|
5
|
|
|
cmsData, |
|
6
|
|
|
coreUtils, |
|
7
|
|
|
Manager |
|
8
|
|
|
} from '../../' |
|
9
|
|
|
|
|
10
|
|
|
export function getFilesRevision(urls, fileName) { |
|
11
|
|
|
var res = [] |
|
12
|
|
|
var number = 1 |
|
13
|
|
|
var tplUrl = cmsData.file.fromUrl(fileName) |
|
14
|
|
|
fileName = fileName.split('/') |
|
15
|
|
|
fileName = fileName[fileName.length - 1] |
|
16
|
|
|
var publishDate = new Date() |
|
17
|
|
|
var json = null |
|
18
|
|
|
|
|
19
|
|
|
if(coreUtils.file.exist(tplUrl.publish.json)) { |
|
20
|
|
|
json = cmsData.file.get(tplUrl.publish.json) |
|
21
|
|
|
if(json != null && json[config.meta.name] != null) { |
|
22
|
|
|
publishDate = new Date(json[config.meta.name].latest.date) |
|
23
|
|
|
} |
|
24
|
|
|
} |
|
25
|
|
|
|
|
26
|
|
|
var publishVersion = false |
|
27
|
|
|
urls.forEach(function (urlObj) { |
|
28
|
|
|
var fileData = cmsData.fileAttr.get(urlObj.cleanPath) |
|
29
|
|
|
if(fileData.s === 'd' && cmsData.fileAttr.delete(urlObj.cleanPath) == cmsData.fileAttr.delete(fileName)) { |
|
30
|
|
|
var currentDate = new Date(urlObj.date) |
|
31
|
|
|
if(currentDate.getTime() > publishDate.getTime()) { |
|
32
|
|
|
if(!publishVersion && res[res.length - 1] != null) { |
|
33
|
|
|
res[res.length - 1].publishedDate = 'same' |
|
34
|
|
|
} |
|
35
|
|
|
publishVersion = true |
|
36
|
|
|
urlObj.publishedDate = 'after' |
|
37
|
|
|
|
|
38
|
|
|
}else if(currentDate.getTime() === publishDate.getTime()) { |
|
39
|
|
|
urlObj.publishedDate = 'same' |
|
40
|
|
|
publishVersion = true |
|
41
|
|
|
}else { |
|
42
|
|
|
urlObj.publishedDate = 'before' |
|
43
|
|
|
} |
|
44
|
|
|
urlObj.version = number |
|
45
|
|
|
number = number + 1 |
|
46
|
|
|
|
|
47
|
|
|
var tplUrlObj = cmsData.file.fromUrl(urlObj.path) |
|
48
|
|
|
if(coreUtils.file.exist(tplUrlObj.publish.json)) { |
|
49
|
|
|
var jsonObj = cmsData.file.get(tplUrlObj.publish.json) |
|
50
|
|
|
urlObj[config.meta.name] = jsonObj[config.meta.name] |
|
51
|
|
|
} |
|
52
|
|
|
res.push(urlObj) |
|
53
|
|
|
} |
|
54
|
|
|
}) |
|
55
|
|
|
return res |
|
56
|
|
|
} |
|
57
|
|
|
|
|
58
|
|
|
/** |
|
59
|
|
|
* Create and array of doc file path containing the versions of this doc |
|
60
|
|
|
* @param {String} path of a doc |
|
|
|
|
|
|
61
|
|
|
* @return {Array} the versions of the doc |
|
62
|
|
|
*/ |
|
63
|
|
|
export function getVersions(docPath) { |
|
64
|
|
|
var result = [] |
|
65
|
|
|
var files = Manager.instance.getList() |
|
66
|
|
|
var dataFile = docPath.replace('.' + config.files.templates.extension, '.json') |
|
67
|
|
|
|
|
68
|
|
|
Array.prototype.forEach.call(files, (file) => { |
|
69
|
|
|
if (file.path.indexOf(dataFile) > -1) { |
|
70
|
|
|
result = file.revisions |
|
71
|
|
|
} |
|
72
|
|
|
}) |
|
73
|
|
|
return result |
|
74
|
|
|
} |
|
75
|
|
|
|
|
76
|
|
|
/** |
|
77
|
|
|
* Return the revision from document html file path |
|
78
|
|
|
* if the docPath contains abe revision [status]-[date] will try to return this revision |
|
79
|
|
|
* else it will return the latest revision |
|
80
|
|
|
* or null |
|
81
|
|
|
* |
|
82
|
|
|
* @param {String} html path |
|
|
|
|
|
|
83
|
|
|
* @return {Object} file revision | null |
|
84
|
|
|
*/ |
|
85
|
|
|
export function getDocumentRevision(docPath) { |
|
86
|
|
|
var result = null |
|
87
|
|
|
var documentPath = docPath |
|
88
|
|
|
var latest = true |
|
89
|
|
|
|
|
90
|
|
|
if(cmsData.fileAttr.test(documentPath)){ |
|
91
|
|
|
latest = false |
|
92
|
|
|
documentPath = cmsData.fileAttr.delete(documentPath) |
|
93
|
|
|
} |
|
94
|
|
|
var revisions = getVersions(documentPath) |
|
95
|
|
|
if (latest && revisions.length >= 0) { |
|
96
|
|
|
result = revisions[0] |
|
97
|
|
|
} else if (!latest) { |
|
98
|
|
|
Array.prototype.forEach.call(revisions, (revision) => { |
|
99
|
|
|
if (revision.html === docPath) { |
|
100
|
|
|
result = revision |
|
101
|
|
|
} |
|
102
|
|
|
}) |
|
103
|
|
|
if (result === null && revisions.length >= 0) { |
|
104
|
|
|
result = revisions[0] |
|
105
|
|
|
} |
|
106
|
|
|
} |
|
107
|
|
|
return result |
|
108
|
|
|
} |
|
109
|
|
|
|
|
110
|
|
|
export function getStatusAndDateToFileName(date) { |
|
111
|
|
|
var res = date.substring(0, 4) + '-' |
|
112
|
|
|
+ date.substring(4, 6) + '-' |
|
113
|
|
|
+ date.substring(6, 11) + ':' |
|
114
|
|
|
+ date.substring(11, 13) + ':' |
|
115
|
|
|
+ date.substring(13, 15) + '.' |
|
116
|
|
|
+ date.substring(15, 19) |
|
117
|
|
|
return res |
|
118
|
|
|
} |
|
119
|
|
|
|
|
120
|
|
|
export function removeStatusAndDateFromFileName(date) { |
|
121
|
|
|
return date.replace(/[-:\.]/g, '') |
|
122
|
|
|
} |
|
123
|
|
|
|
|
124
|
|
|
export function filePathInfos(pathFolder) { |
|
125
|
|
|
var pathArr = pathFolder.split('/') |
|
126
|
|
|
var name = pathArr[pathArr.length - 1] |
|
127
|
|
|
|
|
128
|
|
|
var rootArr = config.root.split('/') |
|
129
|
|
|
var website = rootArr[pathArr.length - 1] |
|
130
|
|
|
return { |
|
131
|
|
|
'name': name, |
|
132
|
|
|
'path': pathFolder, |
|
133
|
|
|
'website': website, |
|
134
|
|
|
'cleanPath': pathFolder.replace(config.root, '').replace(/\/$/, ''), |
|
135
|
|
|
'type': 'folder' |
|
136
|
|
|
} |
|
137
|
|
|
} |
|
138
|
|
|
|
|
139
|
|
|
export function getFilesMerged(files) { |
|
140
|
|
|
var merged = {} |
|
141
|
|
|
var arMerged = [] |
|
142
|
|
|
|
|
143
|
|
|
Array.prototype.forEach.call(files, (file) => { |
|
144
|
|
|
var cleanFilePath = file.cleanFilePath |
|
145
|
|
|
|
|
146
|
|
|
var fileStatusIsPublish = cmsData.fileAttr.get(file.cleanPath) |
|
147
|
|
|
if(fileStatusIsPublish.s != null && file.abe_meta.status === 'publish') { |
|
148
|
|
|
file.abe_meta.status = 'draft' |
|
149
|
|
|
} |
|
150
|
|
|
|
|
151
|
|
|
file.html = path.join('/', file.filePath.replace(/\.json/, `.${config.files.templates.extension}`)) |
|
152
|
|
|
if (file.abe_meta.status === 'publish') { |
|
153
|
|
|
file.htmlPath = path.join(config.root, config.publish.url, path.join('/', file.filePath.replace(/\.json/, `.${config.files.templates.extension}`))) |
|
154
|
|
|
}else { |
|
155
|
|
|
file.htmlPath = path.join(config.root, config.draft.url, path.join('/', file.filePath.replace(/\.json/, `.${config.files.templates.extension}`))) |
|
156
|
|
|
} |
|
157
|
|
|
|
|
158
|
|
|
if(merged[cleanFilePath] == null) { |
|
159
|
|
|
merged[cleanFilePath] = { |
|
160
|
|
|
name: cmsData.fileAttr.delete(file.name), |
|
161
|
|
|
path: cmsData.fileAttr.delete(file.path), |
|
162
|
|
|
html: cmsData.fileAttr.delete(path.join('/', file.filePath.replace(/\.json/, `.${config.files.templates.extension}`))), |
|
163
|
|
|
htmlPath: path.join(config.root, config.publish.url, path.join('/', cmsData.fileAttr.delete(file.filePath.replace(/\.json/, `.${config.files.templates.extension}`)))), |
|
164
|
|
|
cleanPathName: file.cleanPathName, |
|
165
|
|
|
cleanPath: file.cleanPath, |
|
166
|
|
|
cleanName: file.cleanName, |
|
167
|
|
|
cleanNameNoExt: file.cleanNameNoExt, |
|
168
|
|
|
cleanFilePath: file.cleanFilePath, |
|
169
|
|
|
filePath: cmsData.fileAttr.delete(file.filePath), |
|
170
|
|
|
revisions: [] |
|
171
|
|
|
} |
|
172
|
|
|
} |
|
173
|
|
|
|
|
174
|
|
|
merged[cleanFilePath].revisions.push(JSON.parse(JSON.stringify(file))) |
|
175
|
|
|
}) |
|
176
|
|
|
|
|
177
|
|
|
// return merged |
|
178
|
|
|
Array.prototype.forEach.call(Object.keys(merged), (key) => { |
|
179
|
|
|
var revisions = merged[key].revisions |
|
180
|
|
|
revisions.sort(coreUtils.sort.predicatBy('date', -1)) |
|
181
|
|
|
if(revisions[0] != null) { |
|
182
|
|
|
merged[key].date = revisions[0].date |
|
183
|
|
|
} |
|
184
|
|
|
|
|
185
|
|
|
Array.prototype.forEach.call(revisions, (revision) => { |
|
186
|
|
|
|
|
187
|
|
|
var status = revision.abe_meta.status |
|
188
|
|
|
|
|
189
|
|
|
if (status === 'publish') { |
|
190
|
|
|
merged[key][status] = revision |
|
191
|
|
|
}else { |
|
192
|
|
|
merged[key][status] = {} |
|
193
|
|
|
} |
|
194
|
|
|
merged[key][status].path = revision.path |
|
195
|
|
|
merged[key][status].html = revision.html |
|
196
|
|
|
merged[key][status].htmlPath = revision.htmlPath |
|
197
|
|
|
merged[key][status].date = new Date(revision.date) |
|
198
|
|
|
merged[key][status].link = revision.abe_meta.link |
|
199
|
|
|
}) |
|
200
|
|
|
|
|
201
|
|
|
merged[key].revisions = revisions |
|
202
|
|
|
|
|
203
|
|
|
merged[key].date = revisions[0].date |
|
204
|
|
|
merged[key].cleanDate = revisions[0].cleanDate |
|
205
|
|
|
merged[key].duration = revisions[0].duration |
|
206
|
|
|
merged[key].abe_meta = revisions[0].abe_meta |
|
207
|
|
|
|
|
208
|
|
|
arMerged.push(merged[key]) |
|
209
|
|
|
}) |
|
210
|
|
|
|
|
211
|
|
|
return arMerged |
|
212
|
|
|
} |